home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO108.dsk / LISTS.bas < prev    next >
BASIC Source File  |  2012-02-16  |  39KB  |  633 lines

  1. 0  REM PRODOS VER 3 FAMILY ROOTS: LISTS PROGRAM.  COPYRIGHT (C) 1987, STEPHEN C. VORENBERG
  2. 40  GOTO 16000
  3. 100 JJ =  LEN(NE$(W)):KK = 0:N1$ = "":N2$ = "":N3$ = "":N4$ = "": IF JJ = 0  THEN 320
  4. 110  FOR II =  LEN(NE$(W)) TO 1  STEP  -1: IF  MID$ (NE$(W),II,1) < >Q$(5)  THEN 300
  5. 120 KK = KK +1: IF II -JJ = 0  THEN 200
  6. 130  ON KK GOTO 160,150,140
  7. 140 N1$ =  MID$ (NE$(W),II +1,JJ -II): GOTO 200
  8. 150 N2$ =  MID$ (NE$(W),II +1,JJ -II): GOTO 200
  9. 160 N4$ =  RIGHT$(NE$(W),JJ -II)
  10. 200 JJ = II -1: IF KK = 3  THEN II = 1
  11. 300  NEXT : IF JJ -II >0  THEN N3$ =  LEFT$(NE$(W),JJ -II)
  12. 310  IF KK = 2  THEN N1$ = N2$:N2$ = N3$:N3$ = ""
  13. 320  RETURN 
  14. 400 A = NB(I):NB(I) = NB(II):NB(II) = A: RETURN 
  15. 410 ID = 2
  16. 420 ID = ID *2: IF ID < = NB  THEN 420
  17. 430 ID = ID -1
  18. 440 ID =  INT(ID/2): IF ID <1  THEN FL = 1: RETURN 
  19. 450  HTAB 30: VTAB Q(2) -1: PRINT "BOX="ID"  ":JJ = NB -ID: FOR M = 1 TO JJ:I = M
  20. 460 II = I +ID
  21. 470  IF NE$(NB(II)) >NE$(NB(I))  THEN 500
  22. 480  IF OP(12)  THEN  GOSUB 670: IF CZ  THEN ID = 1: RETURN 
  23. 490  GOSUB 400:I = I -ID: IF I > = 1  THEN 460
  24. 500  NEXT 
  25. 510  GOTO 440
  26. 550  IF U <1  OR U >30  THEN  PRINT "THE TRIAL DISK ONLY SUPPORTS "RN$"'S";: GOSUB 860: PRINT "BETWEEN 1 AND 30":U = 0
  27. 551  RETURN 
  28. 580  IF   NOT Q(1)  THEN  RETURN 
  29. 581  IF Q(41) >2  THEN  PRINT  CHR$(27) CHR$(17)
  30. 582  PRINT  CHR$(4)"PR#"Q(3)
  31. 586  PRINT Q$(1);: IF KN = 0  THEN  PRINT V3$;: IF Q(45)  THEN KN = 1
  32. 587  IF   NOT Q(46)  THEN  PRINT  CHR$(9) INT(KL)"N";
  33. 589  RETURN 
  34. 595  IF IQ  AND   NOT JR  THEN JR = 1: GOSUB 580
  35. 596  GOSUB 1680: RETURN 
  36. 600  IF   NOT Q(1)  THEN  RETURN 
  37. 602  PRINT  CHR$(4)"PR#"Q(43): RETURN 
  38. 605  IF   NOT Q(1)  THEN  RETURN 
  39. 607 JR = 0: PRINT  CHR$(4)"PR#"Q(43): RETURN 
  40. 608  RETURN 
  41. 640  GOSUB 670: IF CZ  THEN XZ = Q(28):Y = XZ
  42. 642  RETURN 
  43. 670 A =  PEEK( -16384): IF A =  ASC(CZ$) +128  OR A =  ASC(CZ$)  THEN CZ = 1: POKE  -16368,0
  44. 671  RETURN 
  45. 690  GET YN$: POKE  -16368,0: NORMAL : PRINT YN$: IF YN$ > = "a"  AND YN$ < = "z"  THEN YN$ =  CHR$( ASC(YN$) -32)
  46. 691  RETURN 
  47. 695  PRINT "PRESS ANY KEY TO CONTINUE";: GOSUB 690: RETURN 
  48. 740  GOSUB 1570:MF = 0: PRINT H$(C1)" BY "H1$(2):X3 = 1:Z = 0:B$ = "FIRST "
  49. 745  GOSUB 1550: PRINT B$;: INPUT "NUMBER? ";A$: IF A$ = ""  THEN 780
  50. 750  IF A$ = "P"  THEN  GOSUB 1600: GOSUB 850: GOTO 745
  51. 755  IF A$ = CZ$  THEN LO = 0: RETURN 
  52. 760 A =  VAL(A$):U = A: GOSUB 550: IF   NOT U  THEN 745
  53. 765 Z = Z +1:SV(Z) = A:B$ = "NEXT ":X = A: GOSUB 3500
  54. 767  FOR Y = PA +1 TO SV(Z): CALL LI: NEXT : GOSUB 870: PRINT  CHR$(4):Y = Y -1: GOSUB 800: IF Z <SZ  THEN 745
  55. 780 LO = Z: GOSUB 1205: RETURN 
  56. 800  IF  LEN(NE$(Z)) >3  THEN 815
  57. 805  IF   NOT OP(9)  THEN Z = Z -1
  58. 810  RETURN 
  59. 815  GOSUB 840: IF OP(8)  AND   NOT OP(7)  THEN  RETURN 
  60. 820 W = Z: GOSUB 100: IF N3$ = ""  THEN  RETURN 
  61. 825  IF OP(8)  AND OP(7)  AND Z <SZ  THEN Z = Z +1:SV(Z) = SV(Z -1)
  62. 830 NE$(Z) = N2$ +Q$(5) +N1$ +Q$(5) +N4$: IF  LEN(NE$(Z)) <3  THEN Z = Z -1
  63. 835  RETURN 
  64. 840  IF C1 <3  THEN  PRINT "SAVING "RN$"="Y
  65. 841  RETURN 
  66. 850  PRINT : IF Q(43) = 0  OR Q(40)  THEN  HOME : RETURN 
  67. 855  PRINT  CHR$(12): RETURN 
  68. 860  IF Q(22) <79  THEN  PRINT : RETURN 
  69. 861  PRINT " ";: RETURN 
  70. 865  IF Q(22) <79  THEN  PRINT "-"
  71. 866  RETURN 
  72. 870 NE$(Z) =  MID$ (T$,1): IF NE$(Z) < >""  THEN  IF  ASC(NE$(Z)) = 34  THEN NE$(Z) =  MID$ (NE$(Z),2)
  73. 871  RETURN 
  74. 1000  GOSUB 2400:Z = 0: GOSUB 1080: RETURN 
  75. 1080 X5 = X3: GOSUB 1550: FOR XZ =  INT((X3 -1)/Q(36)) *Q(36) +1 TO  INT((X4 -1)/Q(36)) *Q(36) +Q(36)  STEP Q(36)
  76. 1110 X = XZ: GOSUB 3500: FOR Y = PA +1 TO PA +Q(36):X6 = 0: IF Y <X5  THEN  CALL LI: GOTO 1190
  77. 1120  IF Y >X4  THEN 1190
  78. 1125  ON C3 GOSUB 1230,1225,1400,2250,3150,1230
  79. 1190  NEXT 
  80. 1200  PRINT  CHR$(4): GOSUB 640: NEXT : GOSUB 3520:LO = Z -LM: POKE 34,0: IF CZ  THEN  RETURN 
  81. 1202  GOSUB 1205: RETURN 
  82. 1205  IF LO = 0  THEN  RETURN 
  83. 1220  GOSUB 9500: GOSUB 5500
  84. 1225  RETURN 
  85. 1230  IF Z <SZ  THEN Z = Z +1: CALL LI: GOSUB 870:SV(Z) = Y: GOSUB 800
  86. 1232  GOSUB 1235: RETURN 
  87. 1235  IF Z < = SZ -2  THEN  RETURN 
  88. 1240 XZ = X4:Y = XZ: PRINT Z -LM" NAMES STORED": FOR I = 1 TO 2000: NEXT : RETURN 
  89. 1260  PRINT H$(C1)" WITH ALL THE";: GOSUB 860: PRINT "FOLLOWING-ENTERED NAMES IN COMMON:": PRINT  TAB( 5)"--LAST NAME AT BIRTH";: INPUT NL$
  90. 1270  PRINT  TAB( 5)"--FIRST NAME(S)";: INPUT NF$: PRINT  TAB( 5)"--MARRIED NAME";: INPUT NM$: PRINT : IF NF$ +NL$ +NM$ < >""  THEN  GOSUB 1290: GOSUB 2400: GOSUB 1080
  91. 1275  RETURN 
  92. 1290  IF OP(14)  THEN A$ = NL$: GOSUB 1900:NL$ = B$:A$ = NM$: GOSUB 1900:NM$ = B$:A$ = NF$: GOSUB 1900:NF$ = B$
  93. 1295  RETURN 
  94. 1400  CALL LI: GOSUB 870:W = Z: GOSUB 100: IF NL$ = ""  THEN 1420
  95. 1407  IF OP(14)  THEN A$ = N2$: GOSUB 1900:N2$ = B$
  96. 1410  IF NL$ < >N2$  THEN 1520
  97. 1420  IF NM$ = ""  THEN 1440
  98. 1425  IF OP(14)  THEN A$ = N3$: GOSUB 1900:N3$ = B$
  99. 1430  IF NM$ < >N3$  THEN 1520
  100. 1440  IF NF$ = ""  THEN 1460
  101. 1445  IF OP(14)  THEN A$ = N1$: GOSUB 1900:N1$ = B$
  102. 1450 M = 0:A =  LEN(N1$) - LEN(NF$): IF A <0  THEN 1520
  103. 1452 II = A +1
  104. 1454  IF NF$ =  MID$ (N1$,II, LEN(NF$))  THEN M = II
  105. 1456 II = II -1: IF II >0  THEN 1454
  106. 1458  IF M = 0  THEN 1520
  107. 1460 SV(Z) = Y: GOSUB 800:Z = Z +1: GOSUB 1235
  108. 1520  RETURN 
  109. 1540  GOSUB 7100: PRINT "SEARCHING NAMES": RETURN 
  110. 1550 MM = 0: IF OP(7)  THEN MM = 1: IF OP(8)  THEN MM = 2
  111. 1560  RETURN 
  112. 1570 LO = 0: IF FF  THEN  FOR I = 1 TO SZ:NE$(I) = "": NEXT :I =  FRE(1)
  113. 1575 FF = 1: RETURN 
  114. 1600 SP = 2
  115. 1602  GOSUB 1680:EP = SP + INT(.75 *Q(2)) -4: IF EP >OP +1  THEN EP = OP +1
  116. 1605  POKE 34,0: GOSUB 850: INVERSE : PRINT "SELECT PARAMETER BY LETTER:": NORMAL : PRINT : PRINT "A) FIRST VISIBLE PARAMETER" SPC( 6)"[NOW " CHR$(64 +SP)"]"
  117. 1610 K = 1: FOR I = SP TO EP:K = K +1: PRINT  CHR$(64 +I)") "OP$(I -1) SPC( 30 - LEN(OP$(I -1)) - LEN( STR$(OP(I -1))))"[NOW ";: IF TY(I -1)  THEN  PRINT  CHR$(78 *(OP(I -1) = 0) +89 *(OP(I -1) >0));: GOTO 1613
  118. 1612  PRINT OP(I -1);
  119. 1613  PRINT "]": IF 4 * INT((I -SP +2)/4) = I -SP +2  AND I < >EP  THEN  PRINT 
  120. 1614  NEXT :J = EP: IF DY$ < >""  AND EP = OP +1  THEN J = J +1: PRINT  CHR$(64 +J)") DATE" SPC( 26 - LEN(DY$))"[NOW "DY$"]"
  121. 1618 KK = OP +2: IF DY$ = ""  THEN KK = KK -1
  122. 1620  PRINT : INVERSE : PRINT "WHICH (A-" CHR$(64 +KK)")?";: GOSUB 690
  123. 1628  IF YN$ =  CHR$(13)  THEN  RETURN 
  124. 1630 A =  ASC(YN$) -64: IF A <1  OR A >KK  THEN 1620
  125. 1632  IF DY$ < >""  AND A = KK  THEN 1660
  126. 1635  IF A >1  THEN  PRINT OP$(A -1)"?";: GOTO 1640
  127. 1636  PRINT "FIRST VISIBLE PARAMETER?";: GOSUB 690:B$ = YN$: IF B$ =  CHR$(13)  THEN 1602
  128. 1637  IF B$ <"B"  THEN B$ = "B"
  129. 1638  IF B$ > CHR$(65 +OP)  THEN B$ =  CHR$(65 +OP)
  130. 1639 SP =  ASC(B$) -64: GOTO 1602
  131. 1640  IF   NOT TY(A -1)  THEN 1650
  132. 1645  GOSUB 690: IF YN$ =  CHR$(13)  THEN 1602
  133. 1648 OP(A -1) = (YN$ = "Y"  OR YN$ = "T"  OR YN$ = "1"): GOTO 1602
  134. 1650  INPUT " ";YN$: IF YN$ = ""  THEN 1602
  135. 1655 OP(A -1) =  VAL(YN$): GOTO 1602
  136. 1660  INPUT "DATE?";B$: IF B$ < >""  THEN DY$ = B$
  137. 1670  GOTO 1602
  138. 1680 TB = 0:OP(18) = 0: IF   NOT OP(5)  THEN 1686
  139. 1682 TB = OP(2): IF TB >50  THEN TB = 50
  140. 1683  IF TB <1  THEN TB = 1
  141. 1684  IF OP(11) <1  THEN OP(11) = 1
  142. 1685  IF OP(11) >100  THEN OP(11) = 100
  143. 1686  IF OP(4) <0  THEN OP(4) = 0
  144. 1687  IF OP(4) >120  THEN OP(4) = 50
  145. 1689  RETURN 
  146. 1700 EP = 1:SP = 0: GOSUB 7620:IX = TB +4 - LEN( STR$(X)): IF IX <0  THEN IX = 0
  147. 1702  GOSUB 595: PRINT  SPC( IX)X SPC( 2);:IX = IX + LEN( STR$(X)) +2:KK = 1: FOR JJ = 1 TO  LEN(NE$(W)): IF  MID$ (NE$(W),JJ,1) = Q$(5)  THEN E(KK) = JJ:KK = KK +1: IF KK >3  THEN JJ = 255
  148. 1705  NEXT :E(0) = 0:X6 = KK -1:ID = IX:X5 = 2: IF OP(10)  THEN X5 = 1
  149. 1710 JJ = E(X5):KK = E(X5 -1) +1: GOSUB 2600: IF JJ -KK >0  THEN  GOSUB 1770: PRINT  MID$ (NE$(W),KK,JJ -KK);
  150. 1715  IF X5 = 1  AND OP(10)  THEN  PRINT ",";:IX = IX +1
  151. 1720  PRINT " ";:X5 = X5 +1: IF (OP(10)  AND X5 = X6 +1)  OR (  NOT OP(10)  AND X5 = 2)  THEN 1750
  152. 1730  IF X5 = X6 +1  THEN X5 = 1
  153. 1740  GOTO 1710
  154. 1750 KK = E(X6) +1:JJ =  LEN(NE$(W)): GOSUB 2600: IF JJ -KK >0  THEN  GOSUB 1770: PRINT  MID$ (NE$(W),KK,JJ -KK +1);
  155. 1755 SP = 1: GOSUB 2610: PRINT : IF OP(15) >0  THEN  IF  INT(X7/OP(15)) *OP(15) = X7  THEN  PRINT :X2 = X2 +1
  156. 1760  GOSUB 608: GOSUB 670: IF CZ  THEN X1 = LO
  157. 1765  RETURN 
  158. 1770  IF IX +JJ -KK +1 < = ED  THEN IX = IX +JJ -KK +1: RETURN 
  159. 1780  PRINT :X2 = X2 +1: PRINT  SPC( ID +3);:IX = ID +3: RETURN 
  160. 1800 X1 = 0:X2 = 0:X7 = 0: ONERR  GOTO 4700
  161. 1820  GOSUB 4850: INPUT LO: INPUT FL: INPUT MM: PRINT  CHR$(4): GOSUB 2000: GOSUB 6700: GOSUB 608
  162. 1825  FOR M = 1 TO LO  STEP SZ:K = M +SZ -1: IF K >LO  THEN K = LO
  163. 1830  PRINT  CHR$(4)"READ"CP$: FOR I = M TO K: INPUT SV(I -M +1): CALL LI:NE$(I -M +1) =  MID$ (T$,1):NB(I -M +1) = I -M +1
  164. 1832  IF 10 * INT(I/10) = I  THEN  GOSUB 670: IF CZ  THEN I = LO:M = LO
  165. 1835  NEXT : PRINT  CHR$(4): IF CZ  THEN 1870
  166. 1850  GOSUB 5600: FOR LB = 1 TO K -M +1:X = SV(LB):W = LB:X1 = X1 +1:X7 = X7 +1:X2 = X2 +1: GOSUB 1700: IF X1 = LO  THEN LB = LO:M = LO
  167. 1855  GOSUB 5700
  168. 1860  NEXT : SPEED= 255: IF OP(5)  THEN  GOSUB 605
  169. 1870  NEXT : PRINT  CHR$(4)"CLOSE":FF = 0: GOSUB 5545: POKE 216,0:LO = LO - INT((LO -1)/SZ) *SZ: RETURN 
  170. 1900 B$ = "": IF A$ = ""  THEN  RETURN 
  171. 1910  FOR I = 1 TO  LEN(A$): IF  ASC( MID$ (A$,I,1)) >95  THEN B$ = B$ + CHR$( ASC( MID$ (A$,I,1)) -32): GOTO 1930
  172. 1920 B$ = B$ + MID$ (A$,I,1)
  173. 1930  NEXT : RETURN 
  174. 2000  GOSUB 8700: GOSUB 4900: IF   NOT OP(5)  THEN  GOSUB 850: RETURN 
  175. 2005  IF OP(3)  THEN  GOSUB 6400: GOSUB 5650: GOSUB 6600: RETURN 
  176. 2010 A$ = "NUMERIC": IF FL  THEN A$ = "ALPHABETIC"
  177. 2015  GOSUB 5650: GOSUB 595: PRINT  SPC( OP(4))A$" LIST" SPC( 7)DY$: PRINT : GOSUB 608:X2 = X2 +2
  178. 2020  RETURN 
  179. 2100  IF LO = 0  THEN  PRINT "NO NAMES IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN 
  180. 2102  ONERR  GOTO 2180
  181. 2110  PRINT  CHR$(4)"OPEN"CP$",S"WH(DR,2)",D"WH(DR,3)
  182. 2115  PRINT  CHR$(4)"WRITE"CP$
  183. 2120  PRINT LO: PRINT FL: PRINT MM: FOR I = 1 TO LO: IF FL  THEN  PRINT SV(NB(I)): PRINT NE$(NB(I)): GOTO 2122
  184. 2121  PRINT SV(I): PRINT NE$(I)
  185. 2122  NEXT : PRINT  CHR$(4)"CLOSE"CP$: POKE 216,0: RETURN 
  186. 2180  POKE 216,0: PRINT  CHR$(4)"CLOSE":A =  PEEK(222): IF A = 9  THEN  PRINT "DISK FULL": GOTO 2195
  187. 2190  PRINT "ERROR # " PEEK(222)" AT LINE " PEEK(218) +256 * PEEK(219)" ON DISK READ";: GOSUB 860: PRINT "OR WRITE"
  188. 2195  GOSUB 690: GOTO 20000
  189. 2200  PRINT H$(C1)" FOR ALL";: GOSUB 860: PRINT "SURNAMES SOUNDING LIKE";: INPUT ": ";NL$: IF NL$ < >""  THEN A$ = NL$: GOSUB 2700:NF$ = B$: GOSUB 2400: GOSUB 1080
  190. 2240  RETURN 
  191. 2250  CALL LI: GOSUB 870:W = Z: GOSUB 100:A$ = N2$: GOSUB 2700: IF B$ = NF$  THEN 2310
  192. 2280  IF OP(8)  THEN  IF N3$ < >""  THEN A$ = N3$: GOSUB 2700: IF B$ = NF$  THEN 2310
  193. 2290  IF OP(13)  THEN  IF N4$ < >""  THEN A$ = N4$: GOSUB 2700: IF B$ = NF$  THEN 2310
  194. 2300  GOTO 2320
  195. 2310 SV(Z) = Y: GOSUB 800:Z = Z +1: GOSUB 1235
  196. 2320  RETURN 
  197. 2400  INPUT "START NUMBER?";A$: IF A$ = CZ$  OR (A$ = ""  AND C3 = 1)  THEN 20000
  198. 2405  IF A$ = "P"  OR A$ = "p"  THEN  GOSUB 1600: GOSUB 850: GOTO 2400
  199. 2410 X3 =  VAL(A$): IF X3 <1  THEN 2420
  200. 2415 U = X3: GOSUB 550: IF U  THEN 2440
  201. 2416  GOTO 2400
  202. 2420 A = Q(28): FOR I = 1 TO MP: IF WH(I,0) > -1  THEN  IF A >WH(I,0)  THEN A = WH(I,0)
  203. 2430  NEXT :X3 = A +1
  204. 2440  INPUT "END NUMBER?";A$: IF A$ = CZ$  THEN 20000
  205. 2445  IF A$ = "P"  OR A$ = "p"  THEN  GOSUB 1600: GOSUB 850: PRINT "START WAS "X3: GOTO 2440
  206. 2450 X4 =  VAL(A$): IF X4 <X3  THEN 2455
  207. 2452 U = X4: GOSUB 550: IF U  THEN 2480
  208. 2453  GOTO 2440
  209. 2455  IF C3 = 1  THEN X4 = X3: GOTO 2480
  210. 2460 X4 = X3 +ND -1: FOR J = 1 TO MP: FOR I = 1 TO MP: IF WH(I,0) = X4  THEN X4 = X4 +ND
  211. 2470  NEXT : NEXT 
  212. 2480  GOSUB 1570: IF C3 >2  THEN  GOSUB 1540:Z = 1
  213. 2490  RETURN 
  214. 2600  IF SF >0  THEN  IF JJ -KK +2 +IX >BD  THEN  GOSUB 2620
  215. 2605  RETURN 
  216. 2610  IF SF >0  THEN  GOSUB 2620
  217. 2615  RETURN 
  218. 2620  IF EP = 0  THEN  RETURN 
  219. 2630  PRINT  SPC( BD -IX);:IX = BD: PRINT  LEFT$(CI$,FC -BD);:EP = 0: IF  LEN(CI$) >FC -BD  THEN EP = 1:CI$ =  RIGHT$(CI$, LEN(CI$) -FC +BD)
  220. 2640  IF SP = 1  AND EP = 1  THEN  PRINT :IX = 0: GOTO 2630
  221. 2650  RETURN 
  222. 2700 LA =  LEN(A$):B$ = "":: IF LA = 0  THEN  RETURN 
  223. 2710 LB = 0: FOR I = 1 TO LA:A =  ASC( MID$ (A$,I,1)): GOSUB 2850: IF A = 0  THEN 2800
  224. 2711 LC = SN(A): IF   NOT AL(A)  THEN 2720
  225. 2712 CP$ =  CHR$(A +64): FOR J = 1 TO AL: IF CP$ < > LEFT$(CD$(J),1)  THEN 2719
  226. 2713 M = 1:K = 1: IF LA -I <CD(J,1)  THEN 2719
  227. 2714 K = K +1: IF K >CD(J,1)  THEN 2718
  228. 2715 A =  ASC( MID$ (A$,I +K -1,1)): GOSUB 2850: IF A = 0  THEN K = 9:M = 0: GOTO 2714
  229. 2716  IF  CHR$(A +64) < > MID$ (CD$(J),K,1)  THEN M = 0
  230. 2717  GOTO 2714
  231. 2718  IF M  THEN LC = CD(J,2):J = AL:I = I +CD(J,1) -1
  232. 2719  NEXT 
  233. 2720  IF I = 1  THEN 2740
  234. 2725  IF LC = 0  THEN 2800
  235. 2730  IF LB >0  THEN  IF  ASC( MID$ (B$,LB,1)) = LC +48  THEN 2800
  236. 2740 B$ = B$ + CHR$(LC +48):LB = LB +1: GOTO 2800
  237. 2800  NEXT : IF  LEN(B$) >4  THEN B$ =  LEFT$(B$,4)
  238. 2810  RETURN 
  239. 2850  IF A >64  AND A <91  THEN A = A -64: RETURN 
  240. 2860  IF A >96  AND A <123  THEN A = A -96: RETURN 
  241. 2870 A = 0: RETURN 
  242. 2896  IF PF$ < >WH$(BB)  THEN PF$ = WH$(BB): PRINT  CHR$(4)"PREFIX"PF$",S"WH(BB,2)",D"WH(BB,3)
  243. 2897  RETURN 
  244. 3000  IF MP = 1  THEN  IF WH(1,0) <0  THEN  RETURN 
  245. 3002 BB = 0:A = 0: FOR I = 1 TO MP: IF WH(I,0) > -1  THEN BB = I:A = A +1
  246. 3003  NEXT : IF A = 1  THEN 3020
  247. 3005  PRINT : PRINT "WHICH DATA DISK (";:J = 0: FOR I = 1 TO MP: IF WH(I,0) <0  THEN 3008
  248. 3006  IF J  THEN  PRINT ",";
  249. 3007  PRINT WH(I,4);:J = 1
  250. 3008  NEXT : INPUT ")?";YN$: IF YN$ = ""  OR YN$ = CZ$  THEN  RETURN 
  251. 3010 J =  VAL(YN$):BB = 0: FOR I = 1 TO MP: IF WH(I,4) = J  AND WH(I,0) > -1  THEN BB = I
  252. 3015  NEXT : IF BB = 0  THEN  PRINT "THAT DISK NUMBER ISN'T CURRENTLY";: GOSUB 860: PRINT "AVAILBLE IN A DRIVE": GOTO 3005
  253. 3020 Z = 0:X3 = WH(BB,0) +1:X4 = WH(BB,0) +ND: GOSUB 1080: RETURN 
  254. 3100  PRINT H$(C1)" WITH ALL THE";: GOSUB 860: INPUT "SURNAMES STARTING WITH: ";NL$: PRINT : IF NL$ < >""  THEN  GOSUB 1290: GOSUB 2400: GOSUB 1080
  255. 3110  RETURN 
  256. 3150  CALL LI: GOSUB 870: IF  LEN(NE$(Z)) <4  THEN  RETURN 
  257. 3152 W = Z: GOSUB 100:J = 0: IF N3$ < >""  AND   NOT OP(8)  THEN 3165
  258. 3155 A$ = N3$: IF A$ = ""  THEN A$ = N2$
  259. 3157  IF OP(14)  THEN  GOSUB 1900:A$ = B$
  260. 3160  IF  LEFT$(A$, LEN(NL$)) = NL$  THEN SV(Z) = Y:Z = Z +1:J = 1
  261. 3165  IF N3$ = ""  OR   NOT OP(7)  OR Z > = SZ  THEN 3175
  262. 3168 A$ = N2$: IF OP(14)  THEN  GOSUB 1900:A$ = B$
  263. 3170  IF  LEFT$(A$, LEN(NL$)) = NL$  THEN SV(Z) = Y:NE$(Z) = N2$ +Q$(5) +N1$ +Q$(5) +N4$: IF  LEN(NE$(Z)) >2  THEN Z = Z +1:J = 1
  264. 3175  IF J  THEN  GOSUB 840: GOSUB 1235
  265. 3180  RETURN 
  266. 3400  IF ME(DD,1) =  -1  OR (ME(DD,1) =  -2  AND (Q(8) >1  OR (C1 = 3  AND C2 = 1)))  THEN 3415
  267. 3405  PRINT : PRINT Q$(29)"PLACE A SCRATCH DISK INTO DRIVE "DD". ";: GOSUB 860: PRINT "PRESS ANY KEY WHEN READY";: GOSUB 690: IF YN$ = CZ$  THEN 20000
  268. 3410  GOSUB 18000: GOSUB 850: IF ME(DD,1) = 0  THEN ME(DD,1) =  -2
  269. 3415 DR = 0: FOR I = 1 TO MP: IF WH(I,0) =  -1  THEN  IF WH(I,1) = DD  THEN DR = I:I = MP
  270. 3420  NEXT : IF DR >0  THEN  RETURN 
  271. 3425  FOR I = 1 TO MP: IF WH(I,0) <0  THEN  IF WH(I,1) = DD  THEN DR = I:I = MP
  272. 3430  NEXT : IF DR >0  THEN  RETURN 
  273. 3435  FOR I = 1 TO MP: IF WH(I,1) = DD  THEN DR = I:I = MP
  274. 3440  NEXT : RETURN 
  275. 3500 W = X:BB = 2: ONERR  GOTO 3580
  276. 3505  IF FS < >BB  THEN  GOSUB 3520: GOSUB 3550:ZN$ = PF$ +"NAMELIST." + STR$(WH(BB,4)): PRINT  CHR$(4)"OPEN"ZN$",S"WH(BB,2)",D"WH(BB,3)",L"Q(36) *Q(14) +Q(38):FS = BB
  277. 3510 SP =  INT((X -WH(BB,0) -1)/Q(36)) +1: PRINT  CHR$(4)"READ"ZN$",R"SP: INPUT LN: INPUT LN:PA = (SP -1) *Q(36) +WH(BB,0): POKE 216,0: RETURN 
  278. 3520 FS = 0: IF ZN$ < >""  THEN  PRINT  CHR$(4)"CLOSE"ZN$
  279. 3525  RETURN 
  280. 3550  IF PF$ < >WH$(BB)  THEN PF$ = WH$(BB): PRINT  CHR$(4)"PREFIX"PF$
  281. 3555  RETURN 
  282. 3580  GOSUB 3520: POKE 216,0:A =  PEEK(222): IF A < >5  THEN 2180
  283. 3590  PRINT "NO DATA DISK IN DRIVE "BB: GOTO 2195
  284. 4000  GOSUB 850:A = (Q(22) - LEN(H2$(C2)))/2: HTAB A: INVERSE : PRINT H2$(C2): NORMAL 
  285. 4005 C$ = "READ FROM (FIRST LIST)": GOSUB 5100: IF CZ  THEN  RETURN 
  286. 4030 D1 = DR:C$ = "READ FROM":C3 = 1: GOSUB 4800:DP$ = CP$: IF CZ  THEN  RETURN 
  287. 4035 C$ = "READ FROM (SECOND LIST)": GOSUB 5100: IF CZ  THEN  RETURN 
  288. 4065 D2 = DR: GOSUB 4800:S$ = CP$: IF CZ  THEN  RETURN 
  289. 4070  IF   NOT OP(6)  THEN 4095
  290. 4080 C$ = "SAVED TO (MERGED LIST)": GOSUB 5100: IF CZ  THEN  RETURN 
  291. 4090 D3 = DR: GOSUB 4800:FM$ = CP$: IF CZ  THEN  RETURN 
  292. 4095 LC = 1: GOSUB 4100: RETURN 
  293. 4100  ONERR  GOTO 16720
  294. 4105 FL = 1: PRINT  CHR$(4)"OPEN"DP$",S"WH(D1,2)",D"WH(D1,3): PRINT  CHR$(4)"OPEN"S$",S"WH(D2,2)",D"WH(D2,3): IF OP(6)  THEN  PRINT  CHR$(4)"OPEN"FM$",S"WH(D3,2)",D"WH(D3,3)
  295. 4107 DR = D1: ONERR  GOTO 4700
  296. 4110  PRINT  CHR$(4)"READ"DP$: INPUT LO: INPUT FL: INPUT MM: INPUT Y: CALL LI:NE$(1) =  MID$ (T$,1): PRINT  CHR$(4)
  297. 4115  IF FL <1  THEN  PRINT "NAMES IN "DP$" AREN'T ALPHABETIZED.": FOR I = 1 TO 2000: NEXT : GOTO 4400
  298. 4117 DR = D2: ONERR  GOTO 4700
  299. 4120  PRINT  CHR$(4)"READ"S$: INPUT LN: INPUT FL: INPUT MM: INPUT Z: CALL LI:NE$(2) =  MID$ (T$,1): PRINT  CHR$(4)
  300. 4125  IF FL <1  THEN  PRINT "NAMES IN "S$" AREN'T ALPHABETIZED.": FOR I = 1 TO 2000: NEXT : GOTO 4400
  301. 4127  ONERR  GOTO 2180
  302. 4130  IF OP(6)  THEN  PRINT  CHR$(4)"WRITE"FM$: PRINT LO +LN: PRINT FL: PRINT MM: PRINT  CHR$(4)
  303. 4150 X1 = 0:X2 = 0:X7 = 0:X3 = 1:X4 = 1: IF LC  THEN  GOSUB 5600: GOSUB 2000: GOSUB 6700
  304. 4160 X = Y:W = 1: IF (NE$(1) >NE$(2)  AND  LEN(NE$(2)) >3)  OR  LEN(NE$(1)) <4  THEN X = Z:W = 2
  305. 4200  GOSUB 4410: IF CZ  THEN 4400
  306. 4225  IF W = 2  THEN 4300
  307. 4230  IF X3 = LO  THEN 4340
  308. 4240  GOSUB 4480: GOTO 4160
  309. 4300  IF X4 = LN  THEN 4320
  310. 4310  GOSUB 4490: GOTO 4160
  311. 4320 X = Y:W = 1: GOSUB 4410: IF CZ  OR X3 = LO  THEN 4400
  312. 4330  GOSUB 4480: GOTO 4320
  313. 4340 X = Z:W = 2: GOSUB 4410: IF CZ  OR X4 = LN  THEN 4400
  314. 4350  GOSUB 4490: GOTO 4340
  315. 4400  PRINT  CHR$(4)"CLOSE":LO = 0: POKE 216,0: IF LC  THEN  GOSUB 5545
  316. 4405  RETURN 
  317. 4410  IF LC  THEN X1 = X3 +X4:X2 = X2 +1:X7 = X7 +1: GOSUB 1700: GOSUB 5700
  318. 4450  IF OP(6)  THEN  PRINT  CHR$(4)"WRITE"FM$: PRINT X: PRINT NE$(W): PRINT  CHR$(4)
  319. 4460  IF LC  THEN  IF 10 * INT(X1/10) = X1  THEN  GOSUB 670
  320. 4470  RETURN 
  321. 4480  PRINT  CHR$(4)"READ"DP$: INPUT Y: CALL LI:NE$(1) =  MID$ (T$,1): PRINT  CHR$(4):X3 = X3 +1: RETURN 
  322. 4490  PRINT  CHR$(4)"READ"S$: INPUT Z: CALL LI:NE$(2) =  MID$ (T$,1): PRINT  CHR$(4):X4 = X4 +1: RETURN 
  323. 4500 CZ = 0: GOSUB 850:A = (Q(22) - LEN(H2$(C2)))/2: HTAB A: INVERSE : PRINT H2$(C2): NORMAL 
  324. 4510 C$ = "LOADED FROM": IF C2 = 2  THEN C$ = "READ FROM"
  325. 4520  IF C2 = 4  THEN C$ = "SAVED TO"
  326. 4540  GOSUB 5100: IF CZ  THEN  RETURN 
  327. 4550  GOSUB 4800: IF CZ  THEN  RETURN 
  328. 4560  ON C2 -1 GOSUB 1800,4600,2100: RETURN 
  329. 4600  ONERR  GOTO 4700
  330. 4610  GOSUB 4850:Z = 0:X = 0: INPUT LO: INPUT FL: INPUT MM: IF LO <1  THEN 4690
  331. 4612  IF (MM = 1  AND OP(8))  OR (MM = 2  AND   NOT OP(7))  THEN  PRINT "PARAMETER SETTINGS REQUIRE READING YOUR";: GOSUB 860: PRINT "DATA DISKS TO GET THE NAME PARTS.": PRINT "THIS FEATURE IS NOT NOW AVAILABLE.": FOR I = 1 TO 2000: NEXT :Z = Z +1: GOTO 4690
  332. 4615 X = X +1:Z = Z +1: IF X >LO  THEN 4690
  333. 4620  IF Z > = SZ  THEN 4680
  334. 4625  INPUT SV(Z): CALL LI:NE$(Z) =  MID$ (T$,1):NB(Z) = Z
  335. 4627  ON MM +1 GOTO 4630,4665,4650
  336. 4630  IF   NOT OP(8)  OR OP(7)  THEN  GOSUB 800
  337. 4635  GOTO 4665
  338. 4650  IF   NOT OP(8)  THEN W = Z: GOSUB 100: IF N3$ < >""  THEN Z = Z -1
  339. 4665  IF Z = 10 * INT(Z/10)  THEN  GOSUB 670: IF CZ  THEN Z = Z +1: GOTO 4690
  340. 4670  GOTO 4615
  341. 4680  PRINT "LIST TOO BIG FOR MEMORY. ONLY "X -1" OUT";: GOSUB 860: PRINT "OF "LO" NAMES WILL BE STORED.": FOR I = 1 TO 2000: NEXT 
  342. 4690 LO = Z -1: PRINT  CHR$(4)"CLOSE": POKE 216,0: RETURN 
  343. 4700  POKE 216,0: PRINT  CHR$(4)"CLOSE"CP$:A =  PEEK(222): IF A < >5  THEN 2180
  344. 4710  PRINT : PRINT "FILE NOT FOUND. PROBABLY MISSPELLED.": GOSUB 4800: IF CZ  THEN 20000
  345. 4715  GOSUB 4850: ONERR  GOTO 4700
  346. 4720  RESUME 
  347. 4800  PRINT : PRINT "WHAT IS THE NAME OF FILE ON THE DIS";: GOSUB 865: PRINT "KETTE THE LIST WILL BE "C$;: INPUT CP$: IF CP$ = CZ$  THEN CZ = 1: RETURN 
  348. 4810  IF CP$ = ""  THEN X6 = DR: GOSUB 4870: GOTO 4800
  349. 4820  GOSUB 5200: IF A >0  THEN  PRINT : PRINT "ILLEGAL NAME": GOTO 4800
  350. 4830 CP$ = WH$(DR) +CP$:WH(DR,0) =  -1: RETURN 
  351. 4850  PRINT  CHR$(4)"OPEN"CP$",S"WH(DR,2)",D"WH(DR,3): PRINT  CHR$(4)"READ"CP$: RETURN 
  352. 4870  PRINT  CHR$(4)"CAT"WH$(X6)",S"WH(X6,2)",D"WH(X6,3): RETURN 
  353. 4900  IF   NOT OP(5)  THEN V3$ = "":FC = Q(22): GOTO 4930
  354. 4905 KK = 0: FOR I = 1 TO Q(10): IF OP(21) <Q(I +31) +1  THEN KK = I:I = Q(10)
  355. 4910  NEXT : IF KK = 0  THEN KK = Q(10)
  356. 4920 V3$ = Q$(KK +7):KL =  INT(Q(23) *Q(KK +31)):FC = KL -1
  357. 4930 BD = OP(22): IF BD <15 +TB  THEN BD =  INT(.7 *(FC -TB)) +TB
  358. 4935 ED = FC: IF SF >0  THEN ED = BD
  359. 4940  RETURN 
  360. 5000  IF Q(44) <1  THEN  RETURN 
  361. 5005  FOR I = 12 TO Q(44) +11:DF(I -11) =  VAL( MID$ (Q$(I), LEN(Q$(I)) -1,1)) +1: IF  LEN(Q$(I)) >2  THEN Q$(I) =  LEFT$(Q$(I), LEN(Q$(I)) -2): GOTO 5010
  362. 5007 Q$(I) = ""
  363. 5010  NEXT : RETURN 
  364. 5100 DD = 0: IF Q(8) <2  THEN DD = 1: GOTO 5150
  365. 5101  PRINT : PRINT "DETERMINING THE DRIVE THE LIST IS TO BE";: GOSUB 860: PRINT C$":"
  366. 5102  FOR I = 1 TO MP: IF WH(I,0) =  -1  THEN DD = I
  367. 5105  NEXT : IF DD = 0  THEN 5120
  368. 5110  PRINT : PRINT "USE DRIVE "WH(DD,1)" (Y/N)?";: GOSUB 690: IF YN$ = CZ$  THEN CZ = 1: RETURN 
  369. 5115  IF YN$ < >"N"  THEN DR = DD: RETURN 
  370. 5120  PRINT : PRINT "USE WHICH DISK DRIVE (1-"Q(8);: INPUT ")?";YN$: IF YN$ = CZ$  THEN CZ = 1: RETURN 
  371. 5125  IF YN$ < >""  THEN 5140
  372. 5130  FOR I = 1 TO Q(8): IF WH(I,0) <0  AND ME(WH(I,1),1) > = 0  THEN DD = I
  373. 5135  NEXT : IF DD <1  THEN DD = 1
  374. 5138  GOTO 5150
  375. 5140 DD =  VAL(YN$): IF DD <1  OR DD >Q(8)  THEN 5110
  376. 5150  GOSUB 3400: IF DR = 0  THEN  PRINT : PRINT "NO SCRATCH DISK OR DIRECTORY AVAILABLE.";: GOSUB 860: PRINT "PLEASE TRY AGAIN..": FOR I = 1 TO 3000: NEXT : GOTO 5100
  377. 5160  RETURN 
  378. 5200 A = 0: IF CP$ <"/"  THEN A = 1: RETURN 
  379. 5205  FOR I = 1 TO  LEN(CP$):A$ =  MID$ (CP$,I,1): IF (A$ <"A"  OR A$ >"Z")  AND (A$ <"a"  OR A$ >"z")  AND (A$ <"0"  OR A$ >"9")  AND A$ < >"."  AND A$ < >"/"  THEN A = 1:I = 255
  380. 5210  NEXT : RETURN 
  381. 5500  GOSUB 850: IF C1 = 3  AND C2 = 5  THEN  RETURN 
  382. 5505  IF LO = 0  THEN  PRINT "NOTHING IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN 
  383. 5510  GOSUB 5600:X2 = 0:X7 = 0: GOSUB 2000: GOSUB 6700: FOR X1 = 1 TO LO:X2 = X2 +1:X7 = X7 +1:I = X1: IF C1 = 1  OR (C1 = 3  AND FL)  THEN I = NB(X1)
  384. 5520 X = SV(I):W = I: GOSUB 1700: GOSUB 5700: NEXT : GOSUB 5545: RETURN 
  385. 5545  IF OP(1)  AND OP(5)  THEN  GOSUB 5800
  386. 5550  IF OP(5)  THEN  GOSUB 600:IQ = 0:JR = 0
  387. 5555  IF   NOT OP(5)  THEN  GOSUB 695: SPEED= 255
  388. 5570  RETURN 
  389. 5600  IF   NOT OP(5)  THEN  SPEED=  INT(2.55 *OP(11))
  390. 5605  RETURN 
  391. 5650  IF OP(5)  THEN  GOSUB 850: PRINT "PLEASE READY THE PRINTER"
  392. 5655  IF OP(5)  THEN  GOSUB 580:IQ = 1:JR = 1: IF Q(47)  THEN  GOSUB 595: PRINT :X2 = X2 +1: GOSUB 608
  393. 5660  RETURN 
  394. 5700  IF   NOT OP(5)  THEN  RETURN 
  395. 5705  IF X2 <OP(16)  OR OP(16) = 0  OR (X1 = LO  AND C1 < >3  AND C2 < >1)  THEN  RETURN 
  396. 5710  IF OP(15) >0  THEN  IF (OP(15) <9  AND  INT(X7/OP(15)) *OP(15) < >X7)  THEN  RETURN 
  397. 5720  GOSUB 5800: GOSUB 6700:X7 = 0: RETURN 
  398. 5800  IF   NOT IQ  THEN  RETURN 
  399. 5805  GOSUB 595: IF Q(63)  THEN  FOR I = 1 TO Q(48) -X2: PRINT : NEXT : GOTO 5820
  400. 5810  PRINT  CHR$(12)
  401. 5820  GOSUB 608: IF Q(64)  THEN  GOSUB 690
  402. 5830 X2 = 0: RETURN 
  403. 6000  DIM G$(Q(18)),E(3),H$(6),H1$(6),H2$(6),RC$(Q(44) +11),DF(Q(44)),MT$(12),ME(Q(8),3),ME$(Q(8)),WH(Q(31),4),WH$(Q(31))
  404. 6010 LI = 768:ND = Q(16) +Q(14) +Q(38)/Q(36):ND = (Q(68) *(Q(15) -18) -(Q(36) *Q(14) +Q(38)))/ND:ND =  INT(ND/Q(36)) *Q(36):CZ$ = Q$(22): RETURN 
  405. 6400  IF HL >0  AND OP(17)  THEN  RETURN 
  406. 6401  GOSUB 850: PRINT H$(C1): PRINT : PRINT : INVERSE : PRINT "DEFINING HEADER:": NORMAL : PRINT : POKE 34,5
  407. 6402  IF HL <1  THEN 6410
  408. 6404  PRINT "USE PREVIOUSLY DEFINED HEADER (Y/N/D/E)?";: GOSUB 690: PRINT :OP(3) = (YN$ < >CZ$): IF YN$ = "Y"  OR YN$ = CZ$  THEN  POKE 34,0: RETURN 
  409. 6406  IF YN$ = "D"  THEN  GOSUB 6560: GOTO 6404
  410. 6408  IF YN$ = "E"  THEN  GOSUB 6560: GOTO 6515
  411. 6410 HL = 0: INPUT "HOW MANY BLANK LINES AT THE TOP?";YN$: IF YN$ = ""  THEN 6450
  412. 6420 HL =  VAL(YN$): IF HL <0  THEN HL = 0
  413. 6430  IF HL >Q(18) -2  THEN 6410
  414. 6440  IF HL >0  THEN  FOR I = 1 TO HL:G$(I) = "": NEXT 
  415. 6450  PRINT : PRINT "TYPE UP TO "Q(18) -HL" LINES (" CHR$(65 +HL)" THROUGH " CHR$(64 +Q(18))").  USE";: GOSUB 860: PRINT "'RETURN' TO END:"
  416. 6460  PRINT :HL = HL +1: PRINT "LINE " CHR$(64 +HL)": ";: CALL LI:G$(HL) =  MID$ (T$,1): IF G$(HL) < >""  AND HL <Q(18) -1  THEN 6460
  417. 6470 HL = HL -1: PRINT : INPUT "HOW MANY BLANK LINES TO FOLLOW?";YN$: IF YN$ = ""  THEN HL = HL +1:G$(HL) = "": GOTO 6510
  418. 6480 A =  VAL(YN$): IF A <0  THEN 6510
  419. 6490  IF A > = Q(18) -HL  THEN A = Q(18) -HL -1
  420. 6500  IF A >0  THEN  FOR I = HL +1 TO HL +A:G$(I) = "": NEXT :HL = HL +A
  421. 6510  GOSUB 6560: PRINT : PRINT "IS IT O.K. (Y/N/E)?";: GOSUB 690: IF YN$ = "N"  THEN  GOSUB 850: GOTO 6410
  422. 6511  IF YN$ = CZ$  THEN 20000
  423. 6512  IF YN$ =  CHR$(13)  OR YN$ = "Y"  THEN 6530
  424. 6514  IF YN$ < >"E"  THEN 6510
  425. 6515  PRINT : PRINT "REENTER WHICH LINE (A-" CHR$(64 +HL)"/Z)?";: GOSUB 690: IF YN$ =  CHR$(13)  THEN 6530
  426. 6516  IF YN$ = CZ$  THEN 20000
  427. 6518  IF YN$ = "Z"  THEN  GOSUB 850: GOTO 6410
  428. 6520 A =  ASC(YN$) -64: IF A <1  OR A >HL  THEN 6515
  429. 6525  PRINT : PRINT "LINE " CHR$(64 +A)": ";: CALL LI:G$(A) =  MID$ (T$,1): GOTO 6510
  430. 6530  PRINT : PRINT "DO YOU WANT TO SET ANY PARAMETERS";: GOSUB 860: PRINT "BEFORE STARTING (Y/N)?";: GOSUB 690: POKE 34,0: IF YN$ = "Y"  OR YN$ = "P"  THEN  GOSUB 1600
  431. 6540  RETURN 
  432. 6560  GOSUB 850: PRINT "YOUR HEADER IS:": PRINT : FOR X5 = 1 TO HL: PRINT "LINE " CHR$(64 +X5)": ";:IX = 7: GOSUB 6610: NEXT : RETURN 
  433. 6600  IF HL = 0  THEN  RETURN 
  434. 6605  GOSUB 595: FOR X5 = 1 TO HL: PRINT  SPC( OP(4))V3$;:IX = OP(4):X2 = X2 +1: GOSUB 6610: NEXT : GOSUB 608: RETURN 
  435. 6610  IF G$(X5) = "*"  THEN  PRINT DY$: RETURN 
  436. 6620  IF  LEN(G$(X5)) +IX < = FC  THEN  PRINT G$(X5): RETURN 
  437. 6630 J = 0: FOR I = FC -IX TO 1  STEP  -1: IF  MID$ (G$(X5),I,1) = " "  OR  MID$ (G$(X5),I,1) = "-"  THEN J = I:I = 1
  438. 6635  NEXT : IF J  AND J < LEN(G$(X5))  THEN  PRINT  LEFT$(G$(X5),J): PRINT  SPC( IX +2) RIGHT$(G$(X5), LEN(G$(X5)) -J):X2 = X2 +1: RETURN 
  439. 6640  PRINT G$(X5): RETURN 
  440. 6700 PG = PG +1: GOSUB 595: PRINT : PRINT  SPC( TB)"RECORD";: IF OP(16) >0  AND OP(23) >0  THEN A = FC -TB -12 - LEN( STR$(PG)): IF A > = 0  THEN  PRINT  SPC( A)"PAGE "PG;
  441. 6705  PRINT : PRINT  SPC( TB)"NUMBER" SPC( 3)"NAME";:IX = TB +13: IF SF >0  AND FC -BD >0  AND IX < = BD  THEN  PRINT  SPC( BD -IX) LEFT$(BB$,FC -BD);:IX = FC: IF  LEN(BB$) <FC -BD  THEN IX = BD + LEN(BB$)
  442. 6710  PRINT : PRINT :X2 = X2 +4: GOSUB 608: RETURN 
  443. 6760  GOSUB 850: PRINT : PRINT "A) RUN A DIFFERENT PROGRAM": PRINT "B) CHECK FREE SPACE": PRINT "C) RETURN TO 'LISTS'": PRINT "D) END SESSION"
  444. 6762  PRINT : INVERSE : PRINT "CHOICE (A-D)?";: GOSUB 690: IF YN$ =  CHR$(13)  THEN  GOTO 6780
  445. 6763 C1 =  ASC(YN$) -64: IF C1 <1  OR C1 >4  THEN 6762
  446. 6764  IF C1 = 4  THEN  GOSUB 850: PRINT Q$(21): PRINT "BYE...": END 
  447. 6765  ON C1 GOTO 6780,6770,20000
  448. 6770  PRINT "FREE SPACE=" FRE(0): GOSUB 690: GOTO 6760
  449. 6780  GOSUB 6792: IF CZ  THEN 6760
  450. 6785  GOSUB 7100: PRINT "LOADING NEXT MODULE": ONERR  GOTO 2180
  451. 6788  PRINT  CHR$(4)"PREFIX,S"WH(BB,2)",D"WH(BB,3): PRINT  CHR$(4)"PREFIX": INPUT PF$:A$ = ME$(WH(BB,1)): IF  LEFT$(A$, LEN(PF$)) = PF$  THEN PF$ = A$: PRINT  CHR$(4)"PREFIX"PF$
  452. 6790  PRINT  CHR$(4)"RUNDIMMER"
  453. 6792 CZ = 0:BB =  -1: IF WH(LD,0) =  -3  THEN BB = LD: RETURN 
  454. 6793  FOR I = 1 TO MP: IF WH(I,0) =  -3  THEN BB = I:LD = I:I = MP
  455. 6794  NEXT : IF BB >0  THEN  RETURN 
  456. 6795 BB = Q(29): PRINT : PRINT "CAN'T FIND PROGRAM DISK";: GOSUB 690:CZ = 1: RETURN 
  457. 7100  GOSUB 850: FOR I = 1 TO 7: PRINT : NEXT : INVERSE : PRINT "PLEASE WAIT";: NORMAL : PRINT "...": PRINT : PRINT  SPC( 14);: RETURN 
  458. 7620  IF   NOT SF  THEN  RETURN 
  459. 7625 BB = 2: IF FF < >BB  THEN  GOSUB 8650
  460. 7630  ONERR  GOTO 2180
  461. 7640  IF FF = 0  THEN  GOSUB 3550:ZF$ = PF$ +"FAMILY." + STR$(WH(BB,4)): PRINT  CHR$(4)"OPEN"ZF$",S"WH(BB,2)",D"WH(BB,3)",L"Q(16):FF = BB
  462. 7650  PRINT  CHR$(4)"READ"ZF$",R"X -WH(BB,0):J = 1: CALL LI:RC$(1) =  MID$ (T$,1): IF RC$(1) < >""  THEN  IF  ASC(RC$(1)) = 34  THEN J = 2:RC$(1) =  MID$ (RC$(1),2)
  463. 7660  FOR I = 2 TO 10: CALL LI:RC$(I) =  MID$ (T$,J): NEXT : FOR N = 8 TO 10:A =  VAL(RC$(N)): IF A >0  THEN  FOR I = 1 TO A *(4 -3 *(N >8)): CALL LI: NEXT 
  464. 7670  NEXT : FOR I = 11 TO Q(44) +11: CALL LI:RC$(I) =  MID$ (T$,J): NEXT : PRINT  CHR$(4): POKE 216,0
  465. 7695  GOSUB 7700: RETURN 
  466. 7700 CI$ = RC$(SF):A =  LEN(CI$): FOR I = 1 TO A: IF  MID$ (CI$,I,1) = Q$(4)  THEN A = I -1:I = 256
  467. 7710  NEXT : IF A = 0  THEN CI$ = "": RETURN 
  468. 7720 CI$ =  LEFT$(CI$,A): IF SF = 2  OR SF = 4  OR  LEN(CI$) < >8  THEN  RETURN 
  469. 7730  IF SF >4  THEN  IF DF(SF -11) < >2  THEN  RETURN 
  470. 7731  IF  LEN(CI$) < >8  THEN  RETURN 
  471. 7732 A = 0: FOR I = 1 TO 8: IF  MID$ (CI$,I,1) >"?"  THEN A = 1
  472. 7733  NEXT : IF A >0  THEN  RETURN 
  473. 7735  IF   NOT OP(24)  THEN 7760
  474. 7740 B$ =  LEFT$(CI$,2):A$ =  MID$ (CI$,3,2): IF   NOT Q(25)  THEN T$ = A$:A$ = B$:B$ = T$
  475. 7750 J =  VAL(A$): IF J >0  AND J <13  THEN CI$ = B$ +" " +MT$(J) +" " + RIGHT$(CI$,4): RETURN 
  476. 7760 CI$ =  LEFT$(CI$,2) +"/" + MID$ (CI$,3,2) +"/" + RIGHT$(CI$,4): RETURN 
  477. 8100  GOSUB 9400: GOSUB 850: HTAB (Q(22) -13)/2: INVERSE : PRINT "SPECIAL LISTS": NORMAL : PRINT 
  478. 8110  PRINT "DO YOU WANT TO:": PRINT : FOR I = 1 TO H2: PRINT  CHR$(64 +I)") "H2$(I): NEXT 
  479. 8120  PRINT : INVERSE : PRINT "CHOICE (A-" CHR$(64 +H2)"/P)?";: GOSUB 690: IF YN$ =  CHR$(13)  THEN  RETURN 
  480. 8125  IF YN$ = "P"  THEN  GOSUB 1600: GOTO 8100
  481. 8130 C2 =  ASC(YN$) -64: IF C2 <1  OR C2 >H2  THEN 8120
  482. 8160 CZ = 0:PG = OP(23) -1: ON C2 GOSUB 4000,4500,4500,4500,9300,5500: GOTO 8100
  483. 8400 MP = 0:MQ = 0: FOR I = 1 TO Q(8):ME(I,0) = Q(75 +I):ME$(I) = Q$(40 +I): FOR J = 2 TO 3:ME(I,J) = Q(47 +J +(I -1) *2): NEXT : NEXT :A$ =  STR$(Q(67))
  484. 8405  IF  LEN(A$) <Q(8)  THEN A$ = "0" +A$: GOTO 8405
  485. 8410  IF  LEN(A$) >Q(8)  THEN A$ =  RIGHT$(A$,Q(8))
  486. 8415  FOR I = 1 TO Q(8):ME(I,1) =  VAL( MID$ (A$,Q(8) -I +1,1)) -1: NEXT 
  487. 8420  RETURN 
  488. 8650  IF IQ  THEN  GOSUB 605
  489. 8655 FF = 0: IF ZF$ < >""  THEN  PRINT  CHR$(4)"CLOSE"ZF$
  490. 8660  RETURN 
  491. 8700  IF   NOT OP(19)  THEN SF = 0: RETURN 
  492. 8705  GOSUB 850: PRINT "WHICH FIELD DO YOU WANT ON THE LIST:": PRINT : FOR I = 1 TO 4: PRINT  CHR$(64 +I)") "TI$(I): NEXT : IF Q(44) >0  THEN  FOR I = 5 TO Q(44) +4: PRINT  CHR$(64 +I)") "Q$(I +7): NEXT 
  493. 8707  IF BB$ < >""  AND SF >0  THEN  PRINT : PRINT "(NOW '"BB$"')"
  494. 8710  PRINT : INVERSE : PRINT "CHOICE (A-" CHR$(68 +Q(44))")?";: GOSUB 690: IF YN$ = CZ$  THEN SF = 0: RETURN 
  495. 8712  IF YN$ =  CHR$(13)  THEN  RETURN 
  496. 8715 SF =  ASC(YN$) -64: IF SF <1  OR SF >4 +Q(44)  THEN SF = 0: GOTO 8710
  497. 8720  IF SF >4  THEN  IF DF(SF -4) = 3  THEN  PRINT "USE OF A PERSON FIELD ISN'T ALLOWED":SF = 0: GOTO 8710
  498. 8730  IF SF >4  THEN SF = SF +7:BB$ = Q$(SF): RETURN 
  499. 8740 BB$ = TI$(SF): RETURN 
  500. 9000  DATA ???,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
  501. 9010  DATA 5
  502. 9020  DATA MAKE ALPHABETIC LIST,MAKE NUMERIC ORDER LIST,MAKE SPECIAL LIST,CHANGE PROGRAM PARAMETERS,EXIT PROGRAM
  503. 9040  DATA 6
  504. 9060  DATA NUMBER RANGE,NUMBER LIST,NAME SET,SURNAME SOUNDEX,SURNAME PARTIALS,WHOLE DISK 
  505. 9090  DATA 6
  506. 9095  DATA MERGE ALPHABETIC FILES,SHOW FILE FROM DISK,PUT DISK FILE INTO MEMORY,SAVE LIST TO DISK FILE,ALPHABETIZE MEMORY LIST,REPEAT A LIST
  507. 9100  DATA 24
  508. 9101  DATA TOP-OF-FORM AFTER PRINTS
  509. 9102  DATA SIZE OF LEFT MARGIN
  510. 9103  DATA USE CUSTOM HEADER
  511. 9104  DATA TAB BEFORE HEADER
  512. 9105  DATA SEND LIST TO PRINTER
  513. 9106  DATA SAVE MERGES ON DISK
  514. 9107  DATA USE MAIDEN NAME
  515. 9108  DATA USE MARRIED NAME
  516. 9109  DATA SHOW UNUSED
  517. 9110  DATA SHOW LAST NAME FIRST
  518. 9111  DATA SCREEN SPEED (1-100%)
  519. 9112  DATA ABLE TO ABORT ALPHA
  520. 9113  DATA SEARCH TITLE WITH SOUNDEX
  521. 9114  DATA IGNORE UPPER/LOWER CASE
  522. 9115  DATA NAMES PER GROUP
  523. 9116  DATA LINES PER PAGE
  524. 9117  DATA USE PREVIOUS HEADER
  525. 9118  DATA NOT USED
  526. 9119  DATA PRINT EXTRA FIELD
  527. 9120  DATA NOT USED
  528. 9121  DATA PRINT SIZE
  529. 9122  DATA COLUMN FOR EXTRA FIELD
  530. 9123  DATA FIRST SHEET NUMBER
  531. 9124  DATA USE MONTH NAMES
  532. 9150  DATA 1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,1
  533. 9200  DATA 0,1,2,3,0,1,2,0,0,0,2,4,5,5,0,1,2,6,2,3,0,1,0,2,0,2
  534. 9210  DATA 0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0
  535. 9220  DATA 9
  536. 9230  DATA 2,1,TH,2,5,NG,3,2,TIO,2,2,DG,3,0,IGH,3,3,GHT,2,1,GH,2,6,WR,2,5,GN
  537. 9250  DATA 4
  538. 9260  DATA BIRTH DATE,BIRTH PLACE,DEATH DATE,DEATH PLACE
  539. 9300  IF FL = 0  THEN  GOSUB 9510: RETURN 
  540. 9310  PRINT "LIST IN MEMORY IS ALREADY ALPHABETIC.": FOR I = 1 TO 2000: NEXT : RETURN 
  541. 9400  FOR I = 1 TO Q(8): IF ME(I,1) =  -2  THEN ME(I,1) = 0
  542. 9410  NEXT : RETURN 
  543. 9500  IF C1 = 1  THEN  GOSUB 9510
  544. 9505  RETURN 
  545. 9510  GOSUB 850: IF LO = 0  THEN  PRINT "NOTHING IN MEMORY": FOR I = 1 TO 2000: NEXT : RETURN 
  546. 9515  GOSUB 850: GOSUB 7100: PRINT "SETTING UP ARRAYS"
  547. 9520 I = 1:II = LO: FOR J = 1 TO LO:NB(J) = J: NEXT : IF   NOT OP(9)  THEN II = LO: GOTO 9580
  548. 9530  IF  LEN(NE$(NB(I))) >3  THEN 9560
  549. 9540  GOSUB 400:II = II -1: IF I > = II  THEN 9570
  550. 9550  GOTO 9530
  551. 9560 I = I +1: IF I <II  THEN 9530
  552. 9570  IF  LEN(NE$(NB(II))) <4  THEN II = II -1
  553. 9580 NB = II: IF NB <2  THEN FL = 1: RETURN 
  554. 9590  GOSUB 850: INVERSE : PRINT "ALPHABETIZING NAMELIST.": NORMAL 
  555. 9600 DR =  INT(.003 *NB ^1.5)/10
  556. 9610  PRINT : PRINT "THIS MAY TAKE "DR" MINUTES TO FINISH"
  557. 9620  VTAB Q(2) -7: PRINT "'BOX' IS ONE LESS THAN A POWER OF 2 AND";: GOSUB 860: PRINT "DECREMENTS.  PROCESSING IS DONE WHEN IT": PRINT "IS FINISHED WITH BOX=1.  BOX=1 USES ";: GOSUB 860: PRINT "ABOUT 1/3 OF THE TOTAL TIME."
  558. 9630  GOSUB 410: RETURN 
  559. 12500 DY$ = "":A =  PEEK(49040):N =  PEEK(49041): IF A +N = 0  THEN DY$ = Q$(3): RETURN 
  560. 12510 K =  INT(N/2):I = A - INT(A/32) *32:J = (N -K *2) *8 + INT(A/32): IF J <1  OR J >12  THEN J = 0
  561. 12520 DY$ =  STR$(I) +" " +MT$(J) +" " + STR$(K): RETURN 
  562. 16000  CLEAR :T$ = "": GOSUB 16500: PRINT  CHR$(4)"PR#"Q(43): GOSUB 7100: PRINT "SETTING UP": GOSUB 6000: GOSUB 8400:IQ = 0:JR = 0: GOSUB 5000: FOR I = 0 TO 12: READ MT$(I): NEXT : READ H: FOR I = 1 TO H: READ H$(I): NEXT 
  563. 16020  IF   NOT Q(73)  THEN HL = 0: GOTO 16070
  564. 16022  ONERR  GOTO 16070
  565. 16025  PRINT  CHR$(4)"OPENHEADER": PRINT  CHR$(4)"READHEADER": INPUT HL: FOR I = 1 TO HL: INPUT G$(I): NEXT 
  566. 16070  PRINT  CHR$(4)"CLOSE": POKE 216,0: READ H1: FOR I = 1 TO H1: READ H1$(I): NEXT 
  567. 16075  READ H2: FOR I = 1 TO H2: READ H2$(I): NEXT 
  568. 16077  READ OP: FOR I = 1 TO OP: READ OP$(I): NEXT : FOR I = 1 TO OP: READ TY(I): NEXT :OP$(9) = OP$(9) +" " +RN$ +"'S"
  569. 16079  DIM SN(26),AL(26): FOR I = 1 TO 26: READ SN(I): NEXT : FOR I = 1 TO 26: READ AL(I): NEXT : READ AL
  570. 16080  DIM CD(AL,2),CD$(AL): FOR I = 1 TO AL: READ CD(I,1): READ CD(I,2): READ CD$(I): NEXT 
  571. 16081  READ A: DIM TI$(A): FOR I = 1 TO A: READ TI$(I): NEXT 
  572. 16082 X =  FRE(1): IF X >40000  THEN X = 40000
  573. 16084 SZ =  INT((X -2000)/(Q(14) +13)): DIM NE$(SZ),SV(SZ),NB(SZ): GOSUB 12500
  574. 16087 SF = 0:FC = Q(22): GOSUB 18000
  575. 16090  GOSUB 9400:Z1 = 0:KN = 0: GOSUB 3520: GOSUB 8650:CZ = 0: GOSUB 850: HTAB (Q(22) -22)/2: INVERSE : PRINT "LISTS-OF-NAMES PROGRAM": NORMAL : PRINT : PRINT "WHICH DO YOU WANT TO DO:": PRINT 
  576. 16100 C2 = 0: FOR X = 1 TO H: PRINT  CHR$(64 +X)") "H$(X): NEXT 
  577. 16120  PRINT : INVERSE : PRINT "CHOICE (A-" CHR$(64 +H)")?";: GOSUB 690: IF YN$ =  CHR$(13)  THEN 6760
  578. 16122  IF YN$ = "P"  THEN YN$ =  CHR$(63 +H)
  579. 16125 C1 =  ASC(YN$) -64: IF C1 <1  OR C1 >H  THEN 16120
  580. 16130  PRINT : IF C1 = H  THEN 6760
  581. 16140  GOSUB 1680: ON C1 GOSUB 16170,16170,8100,1600: GOTO 16090
  582. 16170 PG = OP(23) -1:FL = 0: PRINT : PRINT H$(C1)" BY:": PRINT 
  583. 16180  FOR X = 1 TO H1: PRINT  CHR$(64 +X)") "H1$(X): NEXT : PRINT 
  584. 16200  INVERSE : PRINT "CHOICE (A-" CHR$(64 +H1)"/P)?";: GOSUB 690: IF YN$ =  CHR$(13)  THEN  RETURN 
  585. 16202  IF YN$ = "P"  THEN  GOSUB 1600: GOSUB 850: GOTO 16170
  586. 16205 C3 =  ASC(YN$) -64: IF C3 <1  OR C3 >H1  THEN 16200
  587. 16210  PRINT :LM = C3 >2  AND C3 <6: ON C3 GOSUB 1000,740,1260,2200,3100,3000
  588. 16260  RETURN 
  589. 16500  ONERR  GOTO 16700
  590. 16505  DIM Q(84),Q$(50),OP(25),OP$(25),TY(25)
  591. 16510  PRINT  CHR$(4)"OPENCONFIGURATION": PRINT  CHR$(4)"READCONFIGURATION": FOR I = 1 TO 84: INPUT Q(I): NEXT : IF Q(31) <Q(8)  THEN Q(31) = 30
  592. 16520  FOR I = 1 TO 50
  593. 16522 J = 0: GET A$: IF A$ =  CHR$(127)  THEN A$ =  CHR$(0)
  594. 16523  IF A$ =  CHR$(126)  THEN A$ =  CHR$(13):J = 1
  595. 16525  IF A$ < > CHR$(13)  OR J = 1  THEN Q$(I) = Q$(I) +A$: GOTO 16522
  596. 16527  NEXT :A =  VAL(Q$(28)):RN$ = "RN": IF A >0  THEN RN$ =  MID$ (Q$(28),2,A): IF RN$ = ""  THEN RN$ = "RN"
  597. 16530  FOR I = 1 TO 15: INPUT OP(24): NEXT : INPUT A: INPUT A
  598. 16535  INPUT OP(1): INPUT OP(2): FOR I = 1 TO 8: INPUT A: NEXT : INPUT OP(4): INPUT OP(3): INPUT A: INPUT A: INPUT OP(17): INPUT A: INPUT OP(23): FOR I = 1 TO 63: INPUT A: NEXT 
  599. 16540  FOR I = 5 TO 13: INPUT OP(I): NEXT : INPUT OP(15): INPUT OP(21): INPUT OP(14): INPUT OP(19): INPUT OP(20): INPUT OP(22)
  600. 16545  PRINT  CHR$(4)"CLOSE":OP(16) = Q(62): POKE 216,0: RETURN 
  601. 16700 A =  PEEK(222):: IF A = 5  OR A = 6  THEN  PRINT "NO CONFIGURATION FILE AVAILABLE ON DISK": PRINT "LAST USED.  PLEASE SEE MANUAL.": END 
  602. 16720  PRINT  CHR$(4)"CLOSE": PRINT "ERROR # " PEEK(222)" AT LINE " PEEK(218) +256 * PEEK(219)". PLEASE SEE";: GOSUB 860: PRINT "DOS MANUAL.";: GOSUB 690: GOTO 20000
  603. 18000 CC = 0:FL =  -2:MP = 0
  604. 18005 I = 0:FL = FL +1: IF FL >0  THEN 18080
  605. 18010  IF FL = 0  THEN MQ = MP +1
  606. 18015  PRINT  CHR$(4)"CLOSE"PF$"FRWHERE":I = I +1: IF I >Q(8)  THEN 18005
  607. 18017  IF ME(I,1) < >FL  THEN 18015
  608. 18020  PRINT  CHR$(4)"PREFIX,S"ME(I,2)",D"ME(I,3): PRINT  CHR$(4)"PREFIX": INPUT PF$: IF  LEN(ME$(I)) > LEN(PF$)  THEN  IF  LEFT$(ME$(I), LEN(PF$)) = PF$  THEN PF$ = ME$(I): PRINT  CHR$(4)"PREFIX"PF$
  609. 18024 ME$(I) = PF$: ONERR  GOTO 18200
  610. 18025  PRINT  CHR$(4)"OPEN"PF$"FRWHERE,S"ME(I,2)",D"ME(I,3): PRINT  CHR$(4)"READ"PF$"FRWHERE"
  611. 18030  INPUT J: PRINT  CHR$(4):K = 0
  612. 18035 K = K +1: IF K >J  THEN 18015
  613. 18037 MP = MP +1:WH(MP,1) = I:WH(MP,2) = ME(I,2):WH(MP,3) = ME(I,3):WH$(MP) = ME$(I): IF J <1  THEN WH(MP,0) =  -1: GOTO 18015
  614. 18040  PRINT  CHR$(4)"READ"PF$"FRWHERE": INPUT L: INPUT WH$(MP):WH(MP,0) =  -3: IF L > -1  THEN WH(MP,0) =  -L
  615. 18045  IF L < >0  THEN  PRINT  CHR$(4): GOTO 18035
  616. 18047  ONERR  GOTO 18250
  617. 18050  INPUT A: INPUT II: PRINT  CHR$(4)"OPEN"WH$(MP)"FILE.NUMB": PRINT  CHR$(4)"READ"WH$(MP)"FILE.NUMB": INPUT JJ: IF JJ <1  THEN 18065
  618. 18055 KK = MP: INPUT WH(MP,4):WH(MP,0) = (WH(MP,4) -1) *ND: IF JJ <2  THEN 18065
  619. 18060  FOR P = 2 TO JJ:MP = MP +1:WH$(MP) = WH$(KK):WH(MP,1) = I:WH(MP,2) = ME(I,2):WH(MP,3) = ME(I,3): INPUT WH(MP,4):WH(MP,0) = (WH(MP,4) -1) *ND: NEXT 
  620. 18065  PRINT  CHR$(4)"CLOSE"WH$(MP)"FILE.NUMB": IF II < >ND  THEN  PRINT "DATA IN DRIVE "I", DIRECTORY "WH$(MP);: GOSUB 860: PRINT "DOESN'T MATCH THE CONFIGURATION FILE.":CC = 1
  621. 18066  IF JJ <1  THEN MP = MP -1
  622. 18070  GOTO 18035
  623. 18080  IF CC  THEN  PRINT : PRINT "CONTINUING WOULD ENDANGER YOUR DATA.": PRINT : PRINT "BYE..": END 
  624. 18085  IF MP <1  THEN  PRINT "NO DISK DRIVES COULD BE READ SUCCESSFULLY.";: GOSUB 690
  625. 18090  POKE 216,0: RETURN 
  626. 18200  PRINT  CHR$(4)"CLOSE"PF$"FRWHERE": POKE 216,0:A =  PEEK(222): IF A < >5  AND A < >6  THEN 16720
  627. 18210  PRINT  CHR$(4)"OPEN"PF$"FRWHERE": PRINT  CHR$(4)"WRITE"PF$"FRWHERE": PRINT 1: PRINT 1: PRINT ME$(I): PRINT  CHR$(4)"CLOSE"PF$"FRWHERE": PRINT  CHR$(4)"OPEN"PF$"FRWHERE": PRINT  CHR$(4)"READ"PF$"FRWHERE": RESUME 
  628. 18250  PRINT  CHR$(4)"CLOSE"WH$(MP)"FILE.NUMB": POKE 216,0:A =  PEEK(222): IF A < >5  AND A < >6  THEN 16720
  629. 18260  PRINT  CHR$(4)"OPEN"WH$(MP)"FILE.NUMB": PRINT  CHR$(4)"WRITE"WH$(MP)"FILE.NUMB": PRINT 0: PRINT  CHR$(4)"CLOSE"WH$(MP)"FILE.NUMB": PRINT  CHR$(4)"OPEN"WH$(MP)"FILE.NUMB": PRINT  CHR$(4)"READ"WH$(MP)"FILE.NUMB": RESUME 
  630. 19000  ONERR  GOTO 19020
  631. 19010  POP : GOTO 19010
  632. 19020  POKE 216,0: GOTO 16090
  633. 20000  GOTO 19000